package com.qingfeng.client.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.qingfeng.client.bean.Attr;
import com.qingfeng.client.bean.GoodsCommon;
import com.qingfeng.client.bean.GoodsType;
import com.qingfeng.client.dao.GoodsCommonMapper;
import com.qingfeng.client.dao.GoodsType2attrsMapper;
import com.qingfeng.client.dao.GoodsTypeMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

/**
 * @Author ff
 * @Data 2017/10/25 14:50
 */
@Service
public class GoodsTypeService {

    @Resource
    private GoodsTypeMapper goodsTypeDao;
    @Resource
    private GoodsCommonMapper goodsCommonDao;
    @Resource
    private GoodsType2attrsMapper goodsType2attrsDao;

    public List<Map<String,Object>> getChildType(int parentId){
        return goodsTypeDao.queryByParentId(parentId);
    }

    public boolean updateTypeName(GoodsType goodsType) {
        if (goodsTypeDao.updateById(goodsType)!=1){
            return false;
        }
        return true;
    }

    public int deleteType(int id) {
        GoodsType goodsType = goodsTypeDao.selectById(id);
        Integer parentId = goodsType.getParentId();
        goodsTypeDao.deleteById(id);
        goodsTypeDao.deleteById(parentId);
        goodsType2attrsDao.deletes(parentId);
        return 1;
    }

    public List<GoodsCommon> selectType(int id) {
        QueryWrapper<GoodsCommon> wrapper = new QueryWrapper<>();
        return goodsCommonDao.selectList(wrapper);
    }

    public boolean addType(String name,int storeId,String icon) {
        int reslut= goodsTypeDao.selectMax(name);
        int max = reslut+1;
        //父类插入
        boolean fuKey = goodsTypeDao.insertFuLei(name, max,storeId,icon);
        int Max = goodsTypeDao.selectMaxs();
        //子类插入
        boolean zi = goodsTypeDao.insertZiLei(name,max,Max,storeId,icon);
        //goods_type2attr中，创建新的数据关联
        Long id;
        List<Attr> attr = goodsTypeDao.selectAttr();
        for (Attr attrBean : attr) {
            id = attrBean.getId();
            boolean attrs = goodsType2attrsDao.inserts(Max,id);
            if (!attrs){
                return false;
            }
        }
        return true;
    }

    /**
     * 创建父类，并且添加默认子类
     * @param goodsType
     * @return
     */
    public boolean addType(GoodsType goodsType){
        int reslut= goodsTypeDao.selectMax("");
        int commonSort = reslut+1;
        goodsType.setParentId(0);
        goodsType.setLevel(1);
        goodsType.setCommonSort(commonSort);

        goodsTypeDao.insert(goodsType);
        goodsType.setParentId(goodsType.getId());
        goodsType.setLevel(2);
        goodsType.setId(null);
        goodsTypeDao.insert(goodsType);


        //goods_type2attr中，创建新的数据关联
        List<Attr> attr = goodsTypeDao.selectAttr();
        for (Attr attrBean : attr) {
            Long id = attrBean.getId();
            boolean attrs = goodsType2attrsDao.inserts(goodsType.getParentId(),id);
            if (!attrs){
                return false;
            }
        }

        return true;
    }

    public boolean dragSort( List<GoodsType> list) {
        //修改List<GoodsTypeBean>中id的sort
        String sql = "common_sort = case id";
        String sqls = "common_sort = case id";
        for(GoodsType goodsTypeBean:list){
            sql+=" when "+goodsTypeBean.getId()+" then "+goodsTypeBean.getSort();
            Integer ide = goodsTypeBean.getId();
            GoodsType goodsType = goodsTypeDao.selectById(ide);
            Integer id = goodsType.getParentId();
            sqls+=" when "+id+" then "+goodsTypeBean.getSort();
        }
        sql+=" else common_sort end";
        sqls+=" else common_sort end";
        GoodsType goodsType = new GoodsType();
        //直接使用wrapper执行SQL语句，独立的功能不会产生别的影响
        int drag = goodsTypeDao.update(goodsType, new UpdateWrapper<GoodsType>().setSql(sql));
        int drags = goodsTypeDao.update(goodsType, new UpdateWrapper<GoodsType>().setSql(sqls));
        if (drag==0||drags==0){
            return false;
        }
        return true;
    }

    public List<GoodsType> getType() {
        List<GoodsType> goodsTypes = goodsTypeDao.selectByLevel();
        return goodsTypes;
    }

    public boolean updateGoodsType(String name, int id) {
        int parentId = goodsTypeDao.selectParentId(id);
        boolean updates = goodsTypeDao.updates(name, id);
        boolean update2 = goodsTypeDao.update2(name,parentId);
        if (!updates&&!update2){
            return false;
        }
        return true;
    }

    public List<Map<String,Object>> get() {
        return goodsTypeDao.get();
    }
}
